/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package br.jm.acionista.view;

import br.jm.acionista.entity.Livro;
import br.jm.acionista.sistema.eao.LivroEao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class LivroBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private Livro selectedLivro;
    private LazyDataModel<Livro> lazyModel;
    private LivroEao livroJpa;
    private int nTotalReg;

    public LivroBean() {
        livroJpa = LivroEao.getInstance();
        selectedLivro = new Livro();

        lazyModel = new LazyDataModel<Livro>() {

            @Override
            public List<Livro> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {

                List<Livro> lazyLivro = new ArrayList<Livro>();

                try {
                    lazyLivro = livroJpa.getNative("Livro", first, pageSize, sortField, sortOrder, filters, null);
                } catch (Exception ex) {
                    Logger.getLogger(LivroBean.class.getName()).log(Level.SEVERE, null, ex);
                }
                return lazyLivro;
            }
        };

        nTotalReg = livroJpa.getCount("Livro");
        if (nTotalReg == 0) {
            nTotalReg = 1;
            selectedLivro = new Livro();
        }
        lazyModel.setRowCount(nTotalReg);
    }

    public void inserir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            selectedLivro.setIdLivro(null);
            livroJpa.create(selectedLivro);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Livro Inserido com Sucesso", "");

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Inserir", e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            livroJpa.edit(selectedLivro);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Livro Alterado com Sucesso", "");
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Alterar: ", e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            livroJpa.destroy(selectedLivro);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Livro Excluido com Sucesso", "");
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: ", e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }
    
    public Livro novo() {
        this.selectedLivro = new Livro();

        return this.selectedLivro;
    }

    public LazyDataModel<Livro> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<Livro> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public Livro getSelectedLivro() {
        return selectedLivro;
    }

    public void setSelectedLivro(Livro selectedLivro) {
        if (selectedLivro == null) {
            selectedLivro = new Livro();
        }
        this.selectedLivro = selectedLivro;
    }
}
